home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Camelot / Camelot 105 (1991-02)(Swedish User Group of Amiga)(SE)(PD)[WB].zip / Camelot 105 (1991-02)(Swedish User Group of Amiga)(SE)(PD)[WB].adf / AmigaUUCP / dnews / edit.c < prev    next >
C/C++ Source or Header  |  1990-12-08  |  5KB  |  237 lines

  1.  
  2. /*
  3.  *  EDIT (reply, followup)
  4.  */
  5.  
  6. #include "defs.h"
  7.  
  8. Prototype void ReplyArticle(short, NGroup *);
  9. Prototype void FollowUpArticle(short, NGroup *);
  10. Prototype void PostArticle(NGroup *);
  11.  
  12. Local int EditFile(char *);
  13. Local void IncludeSignature(char *, FILE *);
  14. Local void IncludeText(FILE *, FILE *);
  15.  
  16. void
  17. ReplyArticle(key, grp)
  18. short key;
  19. NGroup *grp;
  20. {
  21.     char *fn = TmpFileName("T:DNews");
  22.     char *nf = FileForArticle(grp, grp->CurNo);
  23.     char *field;
  24.     char *user = GetUserName();
  25.     FILE *fi = fopen(nf, "r");
  26.     FILE *fo;
  27.  
  28.     if (fi == NULL) {
  29.     printf("Unable to open %s\n", nf);
  30.     return;
  31.     }
  32.     fo = fopen(fn, "w");
  33.     if (fo == NULL) {
  34.     printf("Unable to create %s\n", fn);
  35.     fclose(fi);
  36.     return;
  37.     }
  38.  
  39.     /*
  40.      *    Get Return Address: Reply-To:
  41.      *                From:
  42.      */
  43.  
  44.     if ((field = FindField(fi, "Reply-To:")) == NULL)
  45.     field = FindField(fi, "From:");
  46.  
  47.     if (field) {
  48.     fprintf(fo, "To: %s\n", field);
  49.     free(field);
  50.     } else {
  51.     fprintf(fo, "To: \n");
  52.     }
  53.  
  54.     if (field = FindField(fi, "Subject:")) {
  55.     char *base = field;
  56.     while (*field == ' ' || *field == 9)
  57.         ++field;
  58.     if (strnicmp(field, "re:", 3) == 0)
  59.         field += 3;
  60.     fprintf(fo, "Subject: Re: %s\n", field);
  61.     free(base);
  62.     } else {
  63.     fprintf(fo, "Subject: \n");
  64.     }
  65.  
  66.     if (field = FindField(fi, "Message-ID:")) {
  67.     fprintf(fo, "References: %s\n", field);
  68.     free(field);
  69.     }
  70.  
  71.     fprintf(fo, "\n");
  72.     if (isupper(key))
  73.     IncludeText(fi, fo);
  74.     fprintf(fo, "\n");
  75.     IncludeSignature(user, fo);
  76.     fclose(fo);
  77.  
  78.     if (EditFile(fn)) {
  79.     sprintf(TmpBuf, "%s < %s -f %s", GetConfigProgram(SENDMAIL), fn, user);
  80.     system(TmpBuf);
  81.     } else {
  82.     puts("Aborted");
  83.     }
  84.     fclose(fi);
  85.     remove(fn);
  86. }
  87.  
  88. void
  89. FollowUpArticle(key, grp)
  90. short key;
  91. NGroup *grp;
  92. {
  93.     char *fn = TmpFileName("T:DNews");
  94.     char *nf = FileForArticle(grp, grp->CurNo);
  95.     char *field;
  96.     char *user = GetUserName();
  97.     FILE *fi = fopen(nf, "r");
  98.     FILE *fo;
  99.  
  100.     if (fi == NULL) {
  101.     printf("Unable to open %s\n", nf);
  102.     return;
  103.     }
  104.     fo = fopen(fn, "w");
  105.     if (fo == NULL) {
  106.     printf("Unable to create %s\n", fn);
  107.     fclose(fi);
  108.     return;
  109.     }
  110.  
  111.     fprintf(fo, "Newsgroups: %s\n", grp->Name);
  112.  
  113.     if (field = FindField(fi, "Subject:")) {
  114.     char *base = field;
  115.     while (*field == ' ' || *field == 9)
  116.         ++field;
  117.     if (strnicmp(field, "re:", 3) == 0)
  118.         field += 3;
  119.     fprintf(fo, "Subject: Re: %s\n", field);
  120.     free(base);
  121.     } else {
  122.     fprintf(fo, "Subject: \n");
  123.     }
  124.     fprintf(fo, "Distribution: world\n");
  125.  
  126.     fprintf(fo, "\n");
  127.     if (isupper(key)) {
  128.     fprintf(fo, "In article ");
  129.     if (field = FindField(fi, "Message-ID:")) {
  130.         fprintf(fo, "%s ", field);
  131.         free(field);
  132.     } else {
  133.         fprintf(fo, "? ");
  134.     }
  135.  
  136.     if (field = FindField(fi, "From:")) {
  137.         fprintf(fo, "%s", field);
  138.         free(field);
  139.     } else {
  140.         fprintf(fo, "?");
  141.     }
  142.     fprintf(fo, " writes:\n");
  143.  
  144.     IncludeText(fi, fo);
  145.     }
  146.     fprintf(fo, "\n");
  147.     IncludeSignature(user, fo);
  148.     fclose(fo);
  149.  
  150.     if (EditFile(fn)) {
  151.     PostNews(fi, fn);
  152.     } else {
  153.     puts("Aborted");
  154.     }
  155.     fclose(fi);
  156. }
  157.  
  158. void
  159. PostArticle(grp)
  160. NGroup *grp;
  161. {
  162.     char *fn = TmpFileName("T:DNews");
  163.     char *nf = (grp) ? FileForArticle(grp, grp->CurNo) : NULL;
  164.     char *field;
  165.     char *user = GetUserName();
  166.     FILE *fi = NULL;
  167.     FILE *fo;
  168.  
  169.     if (nf)
  170.     fi = fopen(nf, "r");
  171.  
  172.     fo = fopen(fn, "w");
  173.     if (fo == NULL) {
  174.     printf("Unable to create %s\n", fn);
  175.     fclose(fi);
  176.     return;
  177.     }
  178.  
  179.     fprintf(fo, "Newsgroups: %s\n", (grp) ? grp->Name : "");
  180.     fprintf(fo, "Subject: \n");
  181.     fprintf(fo, "Distribution: world\n");
  182.     fprintf(fo, "\n");
  183.     IncludeSignature(user, fo);
  184.     fclose(fo);
  185.  
  186.     if (EditFile(fn)) {
  187.     PostNews(NULL, fn);
  188.     } else {
  189.     puts("Aborted");
  190.     remove(fn);
  191.     }
  192.     fclose(fi);
  193. }
  194.  
  195. static int
  196. EditFile(fn)
  197. char *fn;
  198. {
  199.     sprintf(TmpBuf, "%s %s", GetConfig(NEWSEDITOR, GetConfig(EDITOR, "dme")), fn);
  200.     system(TmpBuf);
  201.     return(getyn("Send It Off?"));
  202. }
  203.  
  204.  
  205. static void
  206. IncludeSignature(user, fo)
  207. char *user;
  208. FILE *fo;
  209. {
  210.     FILE *fi;
  211.  
  212.     sprintf(TmpBuf, "%s.signature", user);
  213.     fi = openlib(TmpBuf);
  214.     if (fi == NULL)
  215.     fi = openlib(".signature");
  216.     if (fi) {
  217.     fputs("--\n", fo);
  218.     while (fgets(TmpBuf, sizeof(TmpBuf), fi))
  219.         fputs(TmpBuf, fo);
  220.     fclose(fi);
  221.     } else {
  222.     puts("Warning, no .signature file!");
  223.     }
  224. }
  225.  
  226. static void
  227. IncludeText(fi, fo)
  228. FILE *fi;
  229. FILE *fo;
  230. {
  231.     rewind(fi);
  232.     while (fgets(TmpBuf, sizeof(TmpBuf), fi) && TmpBuf[0] != '\n');
  233.     while (fgets(TmpBuf, sizeof(TmpBuf), fi))
  234.     fprintf(fo, ">%s", TmpBuf);
  235. }
  236.  
  237.